/**
 * 字面量
 *   文字是直接插入代码中的值
 * 
 * 最佳实践
 *   优先使用文字后缀 L（大写）而不是 l（小写）。
 * 
 * 字符串文字
 *   在编程中，字符串是用于表示文本（例如名称、单词和句子）的连续字符的集合。
 * 
 *   由于字符串在程序中常用，因此大多数现代编程语言都包含基本的字符串数据类型。
 *   由于历史原因，字符串并不是 C++ 中的基本类型。
 *   相反，它们有一种奇怪、复杂的类型，很难使用（一旦我们介绍了解释它们如何工作所需的更多基础知识，我们将在以后的课程中介绍如何/为什么）。
 *   此类字符串通常称为C 字符串或C 样式字符串，因为它们是从 C 语言继承的。
 * 
 * 关于 C 风格字符串文字，有两件事值得了解。
 *   1.所有 C 风格的字符串文字都有一个隐式的 null 终止符。
 *   考虑一个字符串，例如"hello". 虽然这个 C 风格字符串看起来只有 5 个字符，但实际上有 6 个：'h', 'e', 'l', 'l', 'o', 和'\0'（ ASCII 代码为 0 的字符）。
 *   这个结尾的“\0”字符是一个称为空终止符的特殊字符，它用于指示字符串的结尾。以空终止符结尾的字符串称为空终止字符串。
 * 
 *   2.空终止符的原因也是有历史原因的：它可以用来确定字符串的结束位置。
 *   与大多数其他文字（是值，而不是对象）不同，C 样式字符串文字是在程序开始时创建的 const 对象，并保证在整个程序中存在。
 *   C 风格的字符串文字是在程序开始时创建的 const 对象，并保证在整个程序中存在。
 *   与 C 风格的字符串文字不同，std::string 和 std::string_view 创建临时对象。这些临时对象必须立即使用，因为它们在创建它们的完整表达式结束时被销毁。
 * 
 */

#include <iostream>

int main() {
    return 5;                     // 5 is an integer literal
    bool myNameIsAlex { true };   // true is a boolean literal
    double d { 3.4 };             // 3.4 is a double literal
    std::cout << "Hello, world!"; // "Hello, world!" is a C-style string literal


    std::cout << 5 << '\n';  // 5 (no suffix) is type int (by default)
    std::cout << 5L << '\n'; // 5L is type long
    std::cout << 5u << '\n'; // 5u is type unsigned int

    /*
    因为4.1没有后缀，所以文字的类型为double，而不是float。
    当编译器确定文字的类型时，它并不关心您对文字执行的操作（例如，在本例中，使用它来初始化变量float）。
    由于文字 ( double) 的类型与用于初始化 ( float) 的变量类型不匹配，因此必须将文字值转换为 a float，以便可以将其用于初始化变量f。
    将值从 a 转换double为 afloat可能会导致精度损失，因此编译器会发出警告。
    */
    float f { 4.1 }; // warning: 4.1 is a double literal, not a float literal

    float f1 { 4.1f }; // use 'f' suffix so the literal is a float and matches variable type of float
    double d1 { 4.1 }; // change variable to type double so it matches the literal type double


    double pi { 3.14159 }; // 3.14159 is a double literal in standard notation
    double avogadro { 6.02e23 }; // 6.02 x 10^23 is a double literal in scientific notation

    double electronCharge { 1.6e-19 }; // charge on an electron is 1.6 x 10^-19


    // "Hello, world!"是一个字符串文字。字符串文字放在双引号之间以将其标识为字符串（与放在单引号之间的 char 文字相反）。
    std::cout << "Hello, world!";
    
    return 0;
}